package _06_集合;

import _03_链表.LinkedList;
import _01_第一季._00_公共接口.List;
import _01_第一季._00_公共接口.Set;


/*
    内部由双向链表实现的集合
 */
public class ListSet<E> implements Set<E> {
    private List<E> list = new LinkedList<>();

    @Override
    public int size() {
        return list.size();
    }

    @Override
    public boolean isEmpty() {
        return list.isEmpty();
    }

    @Override
    public void clear() {
        list.clear();
    }

    @Override
    public boolean contains(E element) {
        return list.contains(element);
    }

    @Override
    public void add(E element) {
        int index = list.indexOf(element);
        if(index!=List.ELEMENT_NOT_FOUND){
            list.set(index,element);
        }else{
            list.add(element);
        }
    }

    @Override
    public void remove(E element) {
        list.remove(element);
    }

    @Override
    public void traversal(Visitor<E> visitor) {
        if(visitor == null) return;

        int size = list.size();
        for(int i=0;i<size;++i){
            if(visitor.visit(list.get(i))) return;
        }
    }

}
